<?php

class SerialController extends AppController {

    var $name = 'Serial';
    var $uses = array('Tienda', 'Logsql', 'TiendaLocal', 'Serial');
    var $helpers = array('Html', 'Ajax', 'Javascript', 'Vista', 'Interfaz');
    var $layout = "ajax";
    var $components = array('Utilitario', 'Interfaz', 'Vista', 'Maestro','Util');

    function beforeFilter() {
        $this->validar();
    }

    function index($busq = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $this->Vista->title("Tiendas - Serial (Numeros de Control Forma Libre)");
        $this->set('busq', $busq);

        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendasUsuario = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendasUsuario);

        $tiendasId = array();

        foreach ($listaTiendasPermitidas as $llave => $valor) {
            $tiendasId[] = $llave;
        }

        $listaTiendas = $this->TiendaLocal->find('all', array('conditions' => array('TiendaLocal.id' => $tiendasId, 'TiendaLocal.estatus' => 1), 'order' => 'TiendaLocal.codigo'));
        $this->set('data', $listaTiendas);
    }

    public function ver($idTienda = null) {
        $idTienda = $this->Interfaz->id($idTienda);
        $tienda = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo, TiendaLocal.nombre', 'conditions' => array('TiendaLocal.id' => $idTienda)));
        $BdPunto = $tienda['TiendaLocal']['base_datos'];
        $ObjSerial = $this->Maestro->modelo('punto', 'Serial', $BdPunto);
        $listaSerial = $ObjSerial->find('all', array('conditions' => array('Serial.id >' => 0)));
        $this->set('data', $listaSerial);
        $this->set('busq', null);
        $this->set('datosTienda', $tienda);
        $this->set('idTienda', $idTienda);
    }

    public function nuevo() {

        $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';

        $tiendas = $this->Session->read('tiendas_disponibles');
        $listaTiendasUsuario = $this->Maestro->listar_tienda_usuarios($tiendas);
        $listaTiendasPermitidas = $this->Util->tiendasActivas($listaTiendasUsuario);
        $tiendasId = array();
        
        foreach ($listaTiendasPermitidas as $llave => $valor) {
            $tiendasId[] = $llave;
        }

        $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id' => $tiendasId, 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
        $this->set('listaTiendas', $listaTiendas);
    }

    public function guardar($vent = null) {
        //  $this->permisos_accion_individual('unidad','nuevo','estatus'); // mensaje que se quiere mostrar
        $data = $this->request->data;
        if (!$this->Vista->empyt($data)) {
            extract($data);
            $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos', 'conditions' => array('TiendaLocal.id' => $tienda_id)));
            $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
            $ObjSerial = $this->Maestro->modelo('punto', 'Serial', $BdPunto);

            if (!$this->Vista->verifica_punto('Serial', $ObjSerial, 'serie', $serie, 'serie')) {
                $d_v = $desde * 1;
                $h_v = $hasta * 1;
                $sql = "select * from serials where ('$d_v' between desde::bigint and hasta::bigint) or ('$h_v' between desde::bigint and hasta::bigint) ";
                $valida = $ObjSerial->query($sql);
                if (count($valida) > 0) {
                    $this->Vista->mensaje("El Rango Desde $desde Hasta $hasta ya esta siendo utilizado", 'ERROR');
                } else {
                    $ObjSerial->query('BEGIN WORK');
                    $d['Serial']['desde'] = $desde;
                    $d['Serial']['hasta'] = $hasta;
                    $d['Serial']['numero'] = $d_v - 1;
                    $d['Serial']['serie'] = $serie;
                    $d['Serial']['usuario_id'] = $this->Interfaz->id($_SESSION['usuario_id']);
                    $d['Serial']['estatus'] = 2;
                    if ($ObjSerial->save($d)) {
                        $this->Vista->mensaje("Forma Libre Guardada Exitosamente!!!", 'EXITO');
                        $ObjSerial->query('COMMIT');
                        $this->log();
                        $this->Vista->cerrar_ventana($vent);
                    } else {
                        $this->Vista->mensaje("Ocurrio un error Guardando", 'ERROR');
                        $ObjSerial->query('ROLLBACK');
                    }
                }
            } else {
                $this->Vista->mensaje("Numero de Serie ya existe!!!", 'ERROR');
            }
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    public function modificar($idSerie = null, $idTienda = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA 
        $data = $this->request->data;
        if (!empty($data)) {
            if (!$this->Vista->empyt($data)) {
                extract($data);
                $idTienda = $this->Interfaz->id($idTiendaMod);
                $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos', 'conditions' => array('TiendaLocal.id' => $idTienda)));
                $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
                $ObjSerial = $this->Maestro->modelo('punto', 'Serial', $BdPunto);
                $id = $this->Interfaz->id($id_serial);
                
                if (!$this->Vista->verifica_punto('Serial', $ObjSerial, 'serie', $serie, 'serie',$id)) {
                    $d_v = $desde * 1;
                    $h_v = $hasta * 1;
                    $sql = "select * from serials where id != $id and (('$d_v' between desde::bigint and hasta::bigint) or ('$h_v' between desde::bigint and hasta::bigint)) ";
                    $valida = $ObjSerial->query($sql);
                    if (count($valida) > 0) {
                        $this->Vista->mensaje("El Rango Desde $desde Hasta $hasta ya esta siendo utilizado", 'ERROR');
                    } else {
                        $ObjSerial->query('BEGIN WORK');
                        $datos['Serial']['id'] = $id;
                        $datos['Serial']['serie'] = $serie;
                        $datos['Serial']['numero'] = $numero;
                        $datos['Serial']['desde'] = $desde;
                        $datos['Serial']['hasta'] = $hasta;
                        if ($ObjSerial->save($datos)) {
                            $ObjSerial->query('COMMIT');
                            $this->Vista->mensaje("Forma Libre Actualizada Exitosamente", 'EXITO');
                            //$this->log();
                            $this->Vista->cerrar_ventana($vent);
                        } else {
                            $ObjSerial->query('ROLLBACK');
                            $this->Vista->mensaje("Ocurrio un error Modificando", 'ERROR');
                        }
                    }
                } else {
                    $this->Vista->mensaje("Numero de Serie ya existe!!!", 'ERROR');
                }
                
            }
            else
                $this->Vista->mensaje("Faltan campos requeridos", 'ERROR');
            
            $this->render("../" . PRINCIPAL . "/mensajes");
        }
        else {
            $idSerie = $this->Interfaz->id($idSerie);
            $idTienda = $this->Interfaz->id($idTienda);
            if (is_numeric($idSerie)) {
                $this->Tienda->virtualFields['nombrecompleto'] = 'Tienda.codigo || \'-\' || Tienda.nombre';
                $listaTiendas = $this->Tienda->find('list', array('fields' => array('id', 'nombrecompleto'), 'conditions' => array('Tienda.id >' => '0', 'Tienda.estatus' => 1), 'order' => 'Tienda.id'));
                $this->set('listaTiendas', $listaTiendas);
                $BdPunto = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos', 'conditions' => array('TiendaLocal.id' => $idTienda)));
                $BdPunto = $BdPunto['TiendaLocal']['base_datos'];
                $ObjSerial = $this->Maestro->modelo('punto', 'Serial', $BdPunto);
                $datos = $ObjSerial->find('first', array('conditions' => array('Serial.id' => $idSerie)));
                $this->set('data', $datos);
                $this->set('idTienda', $idTienda);
            } else {
                $this->Vista->mensaje("Forma Libre Inv&aacute;lida", 'ERROR');
                $this->render("../" . PRINCIPAL . "/mensajes");
            }
        }
    }

    public function cambiar($id = null, $idTienda = null, $estatus = null) {
        //$this->permisos_menu_individual('Movimientos de Materiales'); ///BUSCA LOS PERMISOS QUE SE UTILIZARAN EN LA VISTA
        $id = $this->Interfaz->id($id);
        if (is_numeric($id)) {
            $idTienda = $this->Interfaz->id($idTienda);
            $tienda = $this->TiendaLocal->find('first', array('fields' => 'TiendaLocal.base_datos, TiendaLocal.codigo, TiendaLocal.nombre', 'conditions' => array('TiendaLocal.id' => $idTienda)));
            $BdPunto = $tienda['TiendaLocal']['base_datos'];
            $ObjSerial = $this->Maestro->modelo('punto', 'Serial', $BdPunto);
            $ObjSerial->query('BEGIN WORK');
            if ($estatus == 1) {
                $msj = "Forma Libre Habilitada Exitosamente";
            } else {
                $msj = "Forma Libre Anulada Exitosamente";
            }
            $data['Serial']['id'] = $id;
            $data['Serial']['estatus'] = $estatus;
            if ($ObjSerial->save($data)) {
                $ObjSerial->query('COMMIT');
                $this->Vista->mensaje($msj, 'EXITO');
                $this->log();
            } else {
                $ObjSerial->query('ROLLBACK');
                $this->Vista->mensaje($msj, 'ERROR');
            }
        } else {
            $this->Vista->mensaje("Forma Libre Inv&aacute;lida", 'ERROR');
        }
        $this->render("../" . PRINCIPAL . "/mensajes");
    }

    public function reporte_excel($formato = 1, $b = 1, $busq = null) {
        $condiciones['RetencionTarjeta.id >'] = '0';
        $condiciones['RetencionTarjeta.estatus !='] = 0;
        $busq = (strpos($busq, 'menuadmin') === false) ? $busq : '';
        if (!empty($busq)) {
            if ($b == 2) {
                $dataSerializada = $this->serializador($busq, 1); //1 convierte la cadena serializada en un arreglo
                if (is_array($dataSerializada)) {
                    extract($dataSerializada);
                    if (!empty($codigo))
                        $condiciones['RetencionTarjeta.codigo ILIKE'] = "%$codigo%";
                    if (!empty($descripcion))
                        $condiciones['RetencionTarjeta.nombre ILIKE'] = "%$descripcion%";
                    if (!empty($estatus))
                        $condiciones['RetencionTarjeta.estatus'] = $estatus;
                    $data = $this->RetencionTarjeta->find('all', array('conditions' => $condiciones, 'order' => 'RetencionTarjeta.codigo'));
                    $this->set('data', $data);
                }
            }
            else
                $this->_principal_buscador_reporte('RetencionTarjeta', $busq);
        } else {
            $data = $this->RetencionTarjeta->find('all', array('conditions' => $condiciones, 'order' => 'RetencionTarjeta.id'));
            $this->set('data', $data);
        }
        $this->set('formato', $formato);
    }

}

//class
?>